﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Biciq.Datos;
using System.Collections.Generic;
using Biciq.Web.UI.Servicios;
using System.Linq;

namespace Biciq.Silverlight.UI
{
    public  sealed class  CacheCliente
    {
        public  static List<Pai> ListaPaises {get;set;}
        public static List<FormaPago> ListaFormaPago { get; set; }
        public static List<Parametro> ListaParametros { get; set; }
        public static ParametrosSancione ParametrosSanciones{get;set;}

        private static BiciqDomainContext _administracionContexto = new BiciqDomainContext();
        public static BiciqDomainContext AdministracionContexto
        {
            get
            {
                if (_administracionContexto == null)
                {
                    _administracionContexto = new BiciqDomainContext();
                }
                return CacheCliente._administracionContexto;
            }
        }
        /// <summary>
        /// Datos cache del cliente 
        /// </summary>
        public CacheCliente()
        {
            CargarPaises();
            CargarTipoSuscripcion();
            CargarFormaPago();
            CargarParametrosSanciones();
            CargarParametros();
        }
        /// <summary>
        /// Tipo de suscripcion
        /// </summary>
        public Guid SessionId
        {
            get;
            set;
        }
        public static List<TipoSuscripcion> ListaTipoSuscripcion
        {
            get;
            set;
        }
        /// <summary>
        /// Metodo que devuelve los datps del parametro
        /// </summary>
        private void CargarParametros()
        {
            AdministracionContexto.Load(AdministracionContexto.GetParametroesQuery()).Completed += delegate
            {
                ListaParametros = AdministracionContexto.Parametros.ToList();
            };
        }
        /// <summary>
        /// Metodo que muestra los parametros de las sanciones
        /// </summary>
        private void CargarParametrosSanciones()
        {
            AdministracionContexto.Load(AdministracionContexto.GetParametrosSancionesQuery()).Completed += delegate
            {
                ParametrosSanciones = AdministracionContexto.ParametrosSanciones.FirstOrDefault();
            };
        }
        /// <summary>
        /// Metodo que muestra el tipo de susceipción del usuario.
        /// </summary>
        private void CargarTipoSuscripcion()
        {
            AdministracionContexto.Load(AdministracionContexto.GetTipoSuscripcionsQuery()).Completed += delegate
            {
                var suscripciones = AdministracionContexto.TipoSuscripcions.ToList();
                ListaTipoSuscripcion = suscripciones;
            };

        }
        /// <summary>
        /// Metodo que muestra los paises
        /// </summary>
        private void CargarPaises()
        {
            AdministracionContexto.Load(AdministracionContexto.GetPaisQuery()).Completed += delegate
            {
                var paises = AdministracionContexto.Pais.ToList();
                ListaPaises = paises;
            };
        }
        /// <summary>
        /// Metodo que indica la forma de pago del servicio.
        /// </summary>
        private void CargarFormaPago()
        {
            AdministracionContexto.Load(AdministracionContexto.GetFormaPagoQuery()).Completed += delegate
            {
                var formasPago = AdministracionContexto.FormaPagos.ToList();
                ListaFormaPago = formasPago;
            };
        }

       
        private static CacheCliente _instance;
        public static CacheCliente Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new CacheCliente();
                return CacheCliente._instance;
            }

        }
        /// <summary>
        /// Muestra el usuario que esta logueado.
        /// </summary>
        public static Usuario UsuarioLogueado { get;  set; }
      
    }
}
